#include "Pumping_system.h"
#include "Water_collection_system.h"
int g_stop_pump = 0;                     //控制抽水开关
pump_system_feedbdack pump_feedbdack_cb; //反馈抽水进度回调函数地址

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /*互斥锁*/

/***************************
*函数名： raspberry_init
*参数：   发送串口数据函数的 回调地址
*返回值   （int）-1表示gpio初始化失败  -2表示线程创建失败
*功能：   初始化树莓派引脚
***************************/
int raspberry_gpio_init_cb(pump_system_feedbdack _pump_feedbdack)
{
    if (wiringPiSetup() == -1)
    {
        return -1;
    }
    // pullUpDnControl(TEST, PUD_UP); // 引脚设置成上拉
    // pinMode(TEST, INPUT);          // 设置29按钮引脚为输入

    // 设置红外检测引脚为上拉输入模式
    pullUpDnControl(INFRARED_0, PUD_UP); // 引脚设置成上拉
    pinMode(INFRARED_0, INPUT);
    pullUpDnControl(INFRARED_1, PUD_UP);
    pinMode(INFRARED_1, INPUT);

    //设置水位检测引脚为输入模式
    pullUpDnControl(WATER_LEVEL_0, PUD_UP); // 引脚设置成上拉
    pinMode(WATER_LEVEL_0, INPUT);
    pullUpDnControl(WATER_LEVEL_1, PUD_UP);
    pinMode(WATER_LEVEL_1, INPUT);
    pullUpDnControl(WATER_LEVEL_2, PUD_UP);
    pinMode(WATER_LEVEL_2, INPUT);

    //初始化连接继电器的引脚为输出模式
    pinMode(RELAY_0, OUTPUT);
    pinMode(RELAY_1, OUTPUT);
    pinMode(RELAY_2, OUTPUT);
    pinMode(RELAY_3, OUTPUT);
    pinMode(RELAY_4, OUTPUT);
    pinMode(RELAY_5, OUTPUT);
    pinMode(RELAY_6, OUTPUT);
    pinMode(RELAY_7, OUTPUT);

    //初始化关闭所有继电器，都设高电平
    digitalWrite(RELAY_0, LOW);
    digitalWrite(RELAY_1, LOW);
    digitalWrite(RELAY_2, LOW);
    digitalWrite(RELAY_3, LOW);
    digitalWrite(RELAY_4, LOW);
    digitalWrite(RELAY_5, LOW);
    digitalWrite(RELAY_6, LOW);
    digitalWrite(RELAY_7, LOW);

    if ((pthread_create(&water_sampling_id, NULL, water_sampling, (void *)_pump_feedbdack)) == -1)
    {
        printf("创建线程错误!\n");
        return -2;
    }
    return 0;
}

/***************************
*函数名： implement_pump_cmd
*参数：   开始或者停止命令
*返回值   -1为参数错误
*功能：   执行开始或者停止命令
***************************/
int implement_pump_cmd(int pump_cmd)
{
    printf("pump_cmd==%d\n", pump_cmd);
    if (pump_cmd == START_PUMP_WATER || pump_cmd == STOP_PUMP_WATERB || pump_cmd == RECOVERY_PIPE_FINISH || pump_cmd == RESET_PUMP_STSTEM)
    {

        pthread_mutex_lock(&mutex); //互斥锁加锁
        g_stop_pump = pump_cmd;
        pthread_mutex_unlock(&mutex); ////互斥锁解锁
    }
    else
    {
        printf("参数错误：%d\n", pump_cmd);
        return -1;
    }
    return 0;
}